/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelos;

import conexion.CRUD;
import conexion.Conexion;
import enumeraciones.eSemestre;
import enumeraciones.eSituacion;
import global.DatosGlobales;
import interfaces.modelo;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.sql.CallableStatement;

/**
 *
 * @author Luis
 */
public class AlumnosMaterias implements modelo{
    
    public static String TABLA = "Alumnos_Materias";
    public static String SP = "SP_Alumnos_Materias";
    
    private Integer idAlumnoMateria;
    public static final String PROP_IDALUMNOMATERIA = "idAlumnoMateria";
    
    private Alumno idAlumno;
    public static final String PROP_IDALUMNO = "idAlumno";
    
    private Materia idMateria;
    public static final String PROP_IDMATERIA = "idMateria";
    
    private Double calificacion1;
    public static final String PROP_CALIFICACION1 = "calificacion1";
    
    private Double calificacion2;
    public static final String PROP_CALIFICACION2 = "calificacion2";

    private Double calificacion3;
    public static final String PROP_CALIFICACION3 = "calificacion3";
    
    private eSituacion idSituacion;
    public static final String PROP_IDSITUACION = "idSituacion";
    
    private eSemestre idSemestre;
    public static final String PROP_IDSEMESTRE = "idSemestre";
    
    private Boolean nuevo = Boolean.TRUE;

    /**
     * Get the value of idSituacion
     *
     * @return the value of idSituacion
     */
    public eSituacion getIdSituacion() {
        return idSituacion;
    }

    /**
     * Set the value of idSituacion
     *
     * @param idSituacion new value of idSituacion
     */
    public void setIdSituacion(eSituacion idSituacion) {
        eSituacion oldIdSituacion = this.idSituacion;
        this.idSituacion = idSituacion;
        propertyChangeSupport.firePropertyChange(PROP_IDSITUACION, oldIdSituacion, idSituacion);
    }


    /**
     * Get the value of calificacion3
     *
     * @return the value of calificacion3
     */
    public Double getCalificacion3() {
        return calificacion3;
    }

    /**
     * Set the value of calificacion3
     *
     * @param calificacion3 new value of calificacion3
     */
    public void setCalificacion3(Double calificacion3) {
        Double oldCalificacion3 = this.calificacion3;
        this.calificacion3 = calificacion3;
        propertyChangeSupport.firePropertyChange(PROP_CALIFICACION3, oldCalificacion3, calificacion3);
    }

    
    /**
     * Get the value of calificacion2
     *
     * @return the value of calificacion2
     */
    public Double getCalificacion2() {
        return calificacion2;
    }

    /**
     * Set the value of calificacion2
     *
     * @param calificacion2 new value of calificacion2
     */
    public void setCalificacion2(Double calificacion2) {
        Double oldCalificacion2 = this.calificacion2;
        this.calificacion2 = calificacion2;
        propertyChangeSupport.firePropertyChange(PROP_CALIFICACION2, oldCalificacion2, calificacion2);
    }


    /**
     * Get the value of calificacion1
     *
     * @return the value of calificacion1
     */
    public Double getCalificacion1() {
        return calificacion1;
    }

    /**
     * Set the value of calificacion1
     *
     * @param calificacion1 new value of calificacion1
     */
    public void setCalificacion1(Double calificacion1) {
        Double oldCalificacion1 = this.calificacion1;
        this.calificacion1 = calificacion1;
        propertyChangeSupport.firePropertyChange(PROP_CALIFICACION1, oldCalificacion1, calificacion1);
    }


    /**
     * Get the value of idMateria
     *
     * @return the value of idMateria
     */
    public Materia getIdMateria() {
        return idMateria;
    }

    /**
     * Set the value of idMateria
     *
     * @param idMateria new value of idMateria
     */
    public void setIdMateria(Materia idMateria) {
        Materia oldIdMateria = this.idMateria;
        this.idMateria = idMateria;
        propertyChangeSupport.firePropertyChange(PROP_IDMATERIA, oldIdMateria, idMateria);
    }


    /**
     * Get the value of idAlumno
     *
     * @return the value of idAlumno
     */
    public Alumno getIdAlumno() {
        return idAlumno;
    }

    /**
     * Set the value of idAlumno
     *
     * @param idAlumno new value of idAlumno
     */
    public void setIdAlumno(Alumno idAlumno) {
        Alumno oldIdAlumno = this.idAlumno;
        this.idAlumno = idAlumno;
        propertyChangeSupport.firePropertyChange(PROP_IDALUMNO, oldIdAlumno, idAlumno);
    }


    /**
     * Get the value of idAlumnoMateria
     *
     * @return the value of idAlumnoMateria
     */
    public Integer getIdAlumnoMateria() {
        return idAlumnoMateria;
    }

    /**
     * Set the value of idAlumnoMateria
     *
     * @param idAlumnoMateria new value of idAlumnoMateria
     */
    public void setIdAlumnoMateria(Integer idAlumnoMateria) {
        Integer oldIdAlumnoMateria = this.idAlumnoMateria;
        this.idAlumnoMateria = idAlumnoMateria;
        propertyChangeSupport.firePropertyChange(PROP_IDALUMNOMATERIA, oldIdAlumnoMateria, idAlumnoMateria);
    }
    private transient final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    /**
     * Add PropertyChangeListener.
     *
     * @param listener
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    /**
     * Remove PropertyChangeListener.
     *
     * @param listener
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }

    @Override
    public void guardar() {
        try{
        Conexion con = new Conexion("Conexion", DatosGlobales.getInstance().getIpGeneral(), "minisega", "MS", 1521, DatosGlobales.getInstance().getServicio());
        String proc = "begin "+AlumnosMaterias.SP+"(?,?,?,?,?,?,?,?,?,?); end;";
        CallableStatement prepareCall = con.getConexionOracle().prepareCall(proc);
        int i =1;
        if(getNuevo()){
            prepareCall.setInt(i++, CRUD.Insert.getOpcion());
        }else{
            prepareCall.setInt(i++, CRUD.Update.getOpcion());
        }
        prepareCall.setInt(i++, this.getIdAlumnoMateria());
        prepareCall.setInt(i++, this.getIdAlumno().getMatricula());
        prepareCall.setInt(i++, this.getIdMateria().getIdMateria());
        prepareCall.setDouble(i++, this.getCalificacion1());
        prepareCall.setDouble(i++, this.getCalificacion2());
        prepareCall.setDouble(i++, this.getCalificacion3());
        prepareCall.setInt(i++, this.getIdSituacion().getIdSituacion());
        prepareCall.setInt(i++,this.getIdSemestre().getIdSemestre());
        prepareCall.setInt(i++, DatosGlobales.getInstance().getFacultad().getIdFacultad());
        prepareCall.execute();
        }catch(Exception ex){
            System.out.println("Excepcion" + ex);
        }
    }

    @Override
    public void eliminar() {
        try{
        Conexion con = new Conexion("Conexion", DatosGlobales.getInstance().getIpGeneral(), "minisega", "MS", 1521, DatosGlobales.getInstance().getServicio());
        String proc = "begin "+AlumnosMaterias.SP+"(?,?,?,?,?,?,?,?,?,?); end;";
        CallableStatement prepareCall = con.getConexionOracle().prepareCall(proc);
        int i =1;
        prepareCall.setInt(i++, CRUD.Delete.getOpcion());
        prepareCall.setInt(i++, this.getIdAlumnoMateria());
        prepareCall.setInt(i++, this.getIdAlumno().getMatricula());
        prepareCall.setInt(i++, this.getIdMateria().getIdMateria());
        prepareCall.setDouble(i++, this.getCalificacion1());
        prepareCall.setDouble(i++, this.getCalificacion2());
        prepareCall.setDouble(i++, this.getCalificacion3());
        prepareCall.setInt(i++, this.getIdSituacion().getIdSituacion());
        prepareCall.setInt(i++,this.getIdSemestre().getIdSemestre());
        prepareCall.setInt(i++, DatosGlobales.getInstance().getFacultad().getIdFacultad());
        prepareCall.execute();
        }catch(Exception ex){
            System.out.println("Excepcion" + ex);
        }
    }

    /**
     * @return the nuevo
     */
    public Boolean getNuevo() {
        return nuevo;
    }

    /**
     * @param nuevo the nuevo to set
     */
    public void setNuevo(Boolean nuevo) {
        this.nuevo = nuevo;
    }

    /**
     * @return the idSemestre
     */
    public eSemestre getIdSemestre() {
        return idSemestre;
    }

    /**
     * @param idSemestre the idSemestre to set
     */
    public void setIdSemestre(eSemestre idSemestre) {
        eSemestre oldIdSemestre = this.idSemestre;
        this.idSemestre = idSemestre;
        propertyChangeSupport.firePropertyChange(PROP_IDSITUACION, oldIdSemestre, idSemestre);
    }

    
}
